package cn.edu.sgu.www.mhxysy.service.potency;

import cn.edu.sgu.www.mhxysy.dto.potency.PotencyFruitDTO;
import cn.edu.sgu.www.mhxysy.dto.potency.PotencyFruitMoveDTO;
import cn.edu.sgu.www.mhxysy.entity.potency.PotencyFruit;
import cn.edu.sgu.www.mhxysy.pager.Pager;
import cn.edu.sgu.www.mhxysy.vo.potency.PotencyFruitPropertyVO;
import cn.edu.sgu.www.mhxysy.vo.potency.PotencyFruitVO;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import org.springframework.transaction.annotation.Transactional;

import java.util.List;

/**
 * @author 沐雨橙风ιε
 * @version 1.0
 */
public interface PotencyFruitService {

    /**
     * 移动潜能果
     * @param potencyFruitMoveDTO 潜能果信息
     */
    @Transactional(rollbackFor = Exception.class)
    void move(PotencyFruitMoveDTO potencyFruitMoveDTO);

    /**
     * 更换潜能果属性
     * @param fruitId 潜能果ID
     * @param propertyId 属性ID
     */
    void renewal(Integer fruitId, Integer propertyId);

    /**
     * 返还潜能果经验
     * @param fruitId 潜能果ID
     */
    @Transactional(rollbackFor = Exception.class)
    void returnFruit(Integer fruitId);

    /**
     * 兑换潜能果
     * @param roleId 角色ID
     */
    @Transactional(rollbackFor = Exception.class)
    void exchange(String roleId);

    /**
     * 添加潜能果
     * @param potencyFruitDTO 潜能果信息
     */
    void insert(PotencyFruitDTO potencyFruitDTO);

    /**
     * 通过ID删除潜能果
     * @param id 潜能果ID
     */
    void deleteById(Integer id);

    /**
     * 通过ID修改潜能果
     * @param potencyFruitDTO 潜能果信息
     */
    void updateById(PotencyFruitDTO potencyFruitDTO);

    /**
     * 通过ID查询潜能果详情
     * @param id 潜能果ID
     * @return PotencyFruitVO
     */
    PotencyFruitVO selectDetail(Integer id);

    /**
     * 查询兑换下一个潜能果的经验
     * @param roleId 角色ID
     * @return Integer
     */
    Integer selectExchangeExp(String roleId);

    /**
     * 分页查询潜能果列表
     * @param pager 分页参数
     * @return Page<PotencyFruit>
     */
    Page<PotencyFruit> selectByPage(Pager<PotencyFruit> pager);

    /**
     * 查询潜能果列表
     * @param roleId 角色ID
     * @param schemaId 潜能果方案ID
     * @return List<PotencyFruit>
     */
    List<PotencyFruit> selectList(String roleId, Integer schemaId);

    /**
     * 查询潜能果详情列表
     * @param roleId 角色ID
     * @param schemaId 潜能果方案ID
     * @return List<PotencyFruitVO>
     */
    List<PotencyFruitVO> selectDetails(String roleId, Integer schemaId);

    /**
     * 通过角色ID查询潜能果加成属性
     * @param roleId 角色ID
     * @return List<PotencyFruitPropertyVO>
     */
    List<PotencyFruitPropertyVO> selectAdditiveProperties(String roleId);
}